Auditing একটি গুরুত্বপূর্ণ প্রক্রিয়া যা অ্যাপ্লিকেশন বা ডেটাবেসের মধ্যে কোনো পরিবর্তন বা কার্যকলাপের রেকর্ড রাখে। এটি সাধারণত ডেটার পরিবর্তনগুলি ট্র্যাক করতে এবং ব্যবহারকারীদের ক্রিয়াকলাপের ইতিহাস বজায় রাখতে ব্যবহৃত হয়। স্প্রিং ফ্রেমওয়ার্কে, Auditing কনফিগার করা খুব সহজ এবং এটি Spring Data JPA, Spring JDBC, অথবা সাধারণ Spring Beans এর মাধ্যমে করা যেতে পারে।
স্প্রিং জেডিবিসি (Spring JDBC) এ Auditing কনফিগার করা সাধারণত টেবিলের createdAt
, createdBy
, updatedAt
, এবং updatedBy
এর মতো ফিল্ড রাখতে হয়, যা ডেটা তৈরি বা আপডেট হওয়ার সময় স্বয়ংক্রিয়ভাবে পূর্ণ হয়।
@CreatedDate
এবং @LastModifiedDate
এর মাধ্যমে টেবিলের অডিট ফিল্ডে ডেটা অটোমেটিকালি আপডেট করা।@CreatedBy
এবং @LastModifiedBy
এর মাধ্যমে ব্যবহারকারী নির্ধারণ করা যারা ডেটা তৈরি বা আপডেট করেছে।স্প্রিং ফ্রেমওয়ার্কের Auditing ব্যবহারের জন্য সাধারণত Spring Data JPA এর কনফিগারেশন ব্যবহার করা হয়, কিন্তু আমরা Spring JDBC এর জন্যও একটি কাস্টম কনফিগারেশন তৈরি করতে পারি।
আপনার ডেটাবেস টেবিলগুলিতে কিছু অতিরিক্ত কলাম থাকতে হবে যেমন:
CREATE TABLE employee (
id INT PRIMARY KEY,
name VARCHAR(100),
age INT,
created_at TIMESTAMP,
created_by VARCHAR(100),
updated_at TIMESTAMP,
updated_by VARCHAR(100)
);
এখানে, created_at
, created_by
, updated_at
, এবং updated_by
ফিল্ডগুলো ডেটাবেসের অডিটিং তথ্য ট্র্যাক করবে।
AuditHelper
ক্লাস তৈরি করা:এই ক্লাসটি অডিটিং ইনফরমেশন সন্নিবেশ করতে সাহায্য করবে (যেমন, createdBy
, createdAt
, updatedBy
, updatedAt
):
import java.time.LocalDateTime;
public class AuditHelper {
public static String getCurrentUser() {
// আপনি এখানে বর্তমানে লগ ইন করা ব্যবহারকারীর নাম বের করতে পারেন
return "system"; // এটা কেবল উদাহরণের জন্য, এখানে আপনি ব্যবহারকারীর নাম সেট করতে পারেন
}
public static LocalDateTime getCurrentTime() {
return LocalDateTime.now();
}
}
EmployeeDao
ক্লাসের মধ্যে আপনি অডিট ফিল্ড গুলো সেট করতে পারেন, যেমন:
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
import java.time.LocalDateTime;
public class EmployeeDao {
private JdbcTemplate jdbcTemplate;
// DataSource Inject করা হচ্ছে
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
// Employee ইনসার্ট করার সময় অডিটিং তথ্য যোগ করা
public void insertEmployee(Employee employee) {
String sql = "INSERT INTO employee (id, name, age, created_at, created_by, updated_at, updated_by) VALUES (?, ?, ?, ?, ?, ?, ?)";
jdbcTemplate.update(sql,
employee.getId(),
employee.getName(),
employee.getAge(),
AuditHelper.getCurrentTime(), // created_at
AuditHelper.getCurrentUser(), // created_by
AuditHelper.getCurrentTime(), // updated_at
AuditHelper.getCurrentUser() // updated_by
);
}
// Employee আপডেট করার সময় অডিটিং তথ্য যোগ করা
public void updateEmployee(Employee employee) {
String sql = "UPDATE employee SET name = ?, age = ?, updated_at = ?, updated_by = ? WHERE id = ?";
jdbcTemplate.update(sql,
employee.getName(),
employee.getAge(),
AuditHelper.getCurrentTime(), // updated_at
AuditHelper.getCurrentUser(), // updated_by
employee.getId()
);
}
}
এখানে, যখন আপনি insertEmployee
বা updateEmployee
পদ্ধতি কল করেন, তখন অডিটিং তথ্য যেমন created_at
, created_by
, updated_at
, এবং updated_by
অটোমেটিক্যালি ফিল্ডে আপডেট হবে।
Employee
ক্লাসের উদাহরণ:public class Employee {
private int id;
private String name;
private int age;
// getters and setters
}
স্প্রিং কনফিগারেশন ক্লাসে @EnableAspectJAutoProxy
ব্যবহার করা যেতে পারে, যাতে অডিটিং প্রসেস অটোমেটিক্যালি সাপোর্ট করা হয়।
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
@Configuration
@EnableAspectJAutoProxy
@ComponentScan(basePackages = "com.example")
public class AppConfig {
// স্প্রিং কনফিগারেশন
}
আপনি যদি Spring AOP ব্যবহার করতে চান, তবে একটি Audit Aspect তৈরি করতে পারেন, যা insert
এবং update
অপারেশনগুলোর সময় অডিটিং তথ্য স্বয়ংক্রিয়ভাবে যোগ করবে।
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
@Aspect
public class AuditAspect {
@Before("execution(* com.example.EmployeeDao.insertEmployee(..))")
public void addAuditForInsert() {
// অডিটিং তথ্য প্রক্রিয়াকরণ, যেমন created_at, created_by, updated_at, updated_by
System.out.println("Audit info added for insert operation");
}
@Before("execution(* com.example.EmployeeDao.updateEmployee(..))")
public void addAuditForUpdate() {
// অডিটিং তথ্য প্রক্রিয়াকরণ, যেমন updated_at, updated_by
System.out.println("Audit info added for update operation");
}
}
createdBy
এবং updatedBy
ফিল্ডগুলির মাধ্যমে আপনি জানতে পারবেন কোন ব্যবহারকারী কোন ডেটা পরিবর্তন করেছেন।স্প্রিং জেডিবিসি ব্যবহার করে অডিটিং কনফিগার করা সহজ এবং কার্যকর। আপনি যদি টেবিলের জন্য অডিট ফিল্ড (যেমন createdAt
, createdBy
, updatedAt
, updatedBy
) ব্যবহার করেন, তবে স্প্রিং কনফিগারেশন এবং স্প্রিং JDBC এর মাধ্যমে অডিটিং স্বয়ংক্রিয়ভাবে পরিচালনা করা যায়। এটি আপনার অ্যাপ্লিকেশনকে আরও নিরাপদ এবং কার্যকরী করে তোলে, বিশেষ করে যখন ডেটার পরিবর্তন বা আপডেট ট্র্যাক করতে হয়।